#ifndef __ESP01S_CONTROL_H
#define __ESP01S_CONTROL_H

#include "stm32f10x.h" 
#include "freertos.h"
#include "task.h"

#include <string.h>  // strcmp()
#include <stdint.h>  // uint8_t
//#include <stdlib.h>  // itoa()

#include "USART_Config.h"
#include "Buzzer_Init.h"
#include "OLED.h"

#define MAX_MSG_LEN 256

// 状态表
typedef enum {
    ESP_STATE_IDLE = 0,        // 初始状态
    ESP_STATE_WIFI_CONNECT,    // 连接WiFi
    ESP_STATE_TCP_CONNECT,     // 连接TCP服务器
    ESP_STATE_TX_PREPARE,      // 准备发送数据
    ESP_STATE_TRANSPARENT,     // 透传模式
	ESP_STATE_HTTP_CONNECT,	   // 连接HTTP
    ESP_STATE_ERROR            // 结束状态

//    ESP_STATE_EXIT_TRANSPARENT,// 退出透传(+++)
//    ESP_STATE_TX_STOP,         // 关闭发送模式
//    ESP_STATE_TCP_DISCONNECT,  // 关闭TCP连接
} esp_state_t;

// 指令表
static const struct {
    const char* cmd;           // AT指令
    esp_state_t state;    	   // 执行成功后的状态
} at_espcmds[] = {
    // 启动序列
	{"AT+CWMODE_DEF=1\r\n", ESP_STATE_WIFI_CONNECT}, // 必须先设STA模式
    {"AT+CWJAP_DEF=\"yang\",\"12345678\"\r\n", ESP_STATE_TCP_CONNECT},
    {"AT+CIPSTART=\"TCP\",\"47.111.20.8\",9080\r\n", ESP_STATE_TX_PREPARE},
    {"AT+CIPMODE=1\r\n", ESP_STATE_TRANSPARENT},
    {"AT+CIPSEND\r\n", ESP_STATE_HTTP_CONNECT},
    
//    // 退出序列
//    {"+++", 3, ESP_STATE_TX_STOP},
//    {"AT+CIPMODE=0\r\n", 14, ESP_STATE_TCP_DISCONNECT},
//    {"AT+CIPCLOSE\r\n", 12, ESP_STATE_DEINIT},
    
    // 结束标记
    {NULL, ESP_STATE_ERROR}
};

void ESP_AutoConnect(void);
void ESP_StateTransition(char *resp);
void vTask_ESP01s_Heartbeat(void *arg);
void ESP_SendPacket(void);
	
#endif
